#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent ):
        QMainWindow(parent),
        center(new QWidget()),
        menu_bar(new QMenuBar()),
        stacked_serwers(new QStackedWidget()),
        center_layout(new QHBoxLayout(center)),
        serwers_menu_layout(new QVBoxLayout()),
        tools_tab(new QTabWidget()),
        //grupa(new QButtonGroup()),
        serwery_box(new QGroupBox()),
        main_tool_tab(new QWidget()),
        e_ip(new QLineEdit()),
        e_port(new QLineEdit()),
        licznik(0)

{

    qunatity_serwers=new SerwersQuantity();
    qunatity_serwers->setFixedSize(250,150);
    serwery_box->setTitle("Wybierz Serwer");
    serwery_box->setLayout(serwers_menu_layout);
    center_layout->addWidget(serwery_box,0);
    center_layout->setAlignment(serwery_box,Qt::AlignTop);

    init_first_tool_tab();
    center_layout->addWidget(stacked_serwers);
    //qunatity_serwers->show();
    menu_bar->addMenu("Menu");
    setMenuBar(menu_bar);
    setCentralWidget(center);
    add_serwer();
    delete_serwer(1);
    add_serwer();

    //add_serwer();
    add_serwer2();
}

void MainWindow::init_first_tool_tab()
{
    tools_tab->setFixedSize(800,600);
    main_tool_tab =new QWidget();
    QVBoxLayout *main_tool_layout=new QVBoxLayout(main_tool_tab);
    QHBoxLayout *login_layout1=new QHBoxLayout();
    QHBoxLayout *login_layout2=new QHBoxLayout();

    login_layout=new QVBoxLayout();
    ImageWidget *bongoss=new ImageWidget(750,250,"icons/bnglogo2.png");
    QGroupBox *boxik=new QGroupBox("Dodaj Serwer");

    e_ip=new QLineEdit();
    e_ip->setFixedWidth(200);
    e_port=new QLineEdit();
    e_port->setFixedWidth(80);

    login_button=new QPushButton("Zaloguj");
    dodaj_do_bazy=new QPushButton(" Dodaj do Bazy ");
    status_dodania=new QLabel("Status");
    testuj_serwer=new QPushButton("Testuj");
    QLabel *ipl=new QLabel("IP:");
    login_layout1->addWidget(ipl,0,Qt::AlignLeft);
    login_layout1->addWidget(e_ip,0,Qt::AlignLeft);
    QLabel *p=new QLabel("Port:");
    login_layout1->addWidget(p,0,Qt::AlignLeft);
    login_layout1->addWidget(e_port,0,Qt::AlignLeft);

    login_layout2->addLayout(login_layout1);
    login_layout2->addWidget(testuj_serwer);
    login_layout2->addWidget(login_button);
    login_layout2->addWidget(dodaj_do_bazy);
    login_layout->setSpacing(11);

    login_layout->addLayout(login_layout2);

    boxik->setLayout(login_layout);
    boxik->setFixedHeight(65);
    main_tool_layout->addWidget(bongoss);
    bongoss->update();
    QGroupBox *boxik2=new QGroupBox("Serwery");
    boxik2->setLayout(qunatity_serwers->main);
    boxik2->setFixedSize(250,180);
    main_tool_layout->addWidget(boxik,0,Qt::AlignTop);
    main_tool_layout->addWidget(boxik2,3,Qt::AlignTop);
    tools_tab->addTab(main_tool_tab,"ToolTab");

    stacked_serwers->addWidget(tools_tab);
    serwer_buttons.insert(0,new SerwerButoon("Tools",0));
    serwer_buttons[0]->setIcon(QIcon("defuse.png"));
    serwer_buttons[0]->setFixedHeight(35);
    serwers_menu_layout->addWidget(serwer_buttons[0],0,Qt::AlignTop);
    connect(serwer_buttons[0],SIGNAL(clickedd(int)),this,SLOT(change_serwer_slot(int)));
    connect(this,SIGNAL(change_serwer_signal(QWidget*)),stacked_serwers,SLOT(setCurrentWidget(QWidget*)));
    //add_serwer();
    licznik++;

}

void MainWindow::add_serwer()
{
    QString ip="94.124.10.20";
    int port=3455;
    int localport=44556;
    
    qunatity_serwers->add_serwer();

    serwer_managers.insert(licznik,new SerwerManager(ip,port,localport,licznik));
    connect(serwer_managers[licznik]->info,SIGNAL(serwer_status(bool,bool)),qunatity_serwers,SLOT(serwer_add_change(bool,bool)));
    serwer_buttons.insert(licznik,new SerwerButoon("serwer",licznik));
    serwer_buttons[licznik]->setFixedHeight(35);
    serwer_buttons[licznik]->setIcon(QIcon("icons/blackicon.png"));
    serwers_menu_layout->addWidget(serwer_buttons[licznik],0,Qt::AlignTop);
    stacked_serwers->insertWidget(licznik,serwer_managers[licznik]);
    connect(serwer_buttons[licznik],SIGNAL(clickedd(int)),this,SLOT(change_serwer_slot(int)));
    //connect(serwer_buttons[licznik],SIGNAL(clickedd(int)),stacked_serwers,SLOT(setCurrentIndex(int)));
    connect(serwer_managers[licznik]->info,SIGNAL(serwer_valid(int,QString)),this,SLOT(serwervalid(int,QString)));
    connect(serwer_managers[licznik]->info,SIGNAL(rcon_valid(int,bool)),this,SLOT(rconvalid(int,bool)));
    connect(serwer_managers[licznik]->info,SIGNAL(serwer_exit(int)),this,SLOT(delete_serwer(int)));


    licznik++;

}

void MainWindow::add_serwer2()
{
    QString ip="91.210.128.190";
    int port=27077;
    int localport=44558;

    qunatity_serwers->add_serwer();

    serwer_managers.insert(licznik,new SerwerManager(ip,port,localport,licznik));
    connect(serwer_managers[licznik]->info,SIGNAL(serwer_status(bool,bool)),qunatity_serwers,SLOT(serwer_add_change(bool,bool)));
    serwer_buttons.insert(licznik,new SerwerButoon("serwer",licznik));
    serwer_buttons[licznik]->setFixedHeight(35);
    serwer_buttons[licznik]->setIcon(QIcon("icons/blackicon.png"));
    serwers_menu_layout->addWidget(serwer_buttons[licznik],0,Qt::AlignTop);
    stacked_serwers->insertWidget(licznik,serwer_managers[licznik]);
    connect(serwer_buttons[licznik],SIGNAL(clickedd(int)),this,SLOT(change_serwer_slot(int)));
    //connect(serwer_buttons[licznik],SIGNAL(clickedd(int)),stacked_serwers,SLOT(setCurrentIndex(int)));
    connect(serwer_managers[licznik]->info,SIGNAL(serwer_valid(int,QString)),this,SLOT(serwervalid(int,QString)));
    connect(serwer_managers[licznik]->info,SIGNAL(rcon_valid(int,bool)),this,SLOT(rconvalid(int,bool)));
    connect(serwer_managers[licznik]->info,SIGNAL(serwer_exit(int)),this,SLOT(delete_serwer(int)));


    licznik++;


}

void MainWindow::delete_serwer(int id)
{
    //serwer_buttons.at(id)->hide();
    qunatity_serwers->delete_serwer(
            serwer_managers[id]->info->activeSerwer,
            serwer_managers[id]->info->activeRcon);

    serwer_buttons[id]->hide();
    stacked_serwers->setCurrentIndex(0);
    stacked_serwers->removeWidget(serwer_managers[id]);
    serwer_managers[id]->info->exit();
    serwer_managers[id]->info->terminate();
    serwer_managers[id]->info->~QObject();
    serwer_managers[id]->~QObject();
    serwer_buttons.remove(id);

   /* stacked_serwers->setCurrentIndex(0);
    serwer_mangers[id]->info->exit();
    serwer_mangers[id]->info->terminate();
    serwer_mangers[id]->info->~QObject();
    serwer_mangers[id]->~QObject();
    stacked_serwers->insertWidget(id,new QWidget);
    serwer_buttons[id]->~QWidget();*/
}

void MainWindow::serwervalid(int id, QString s_name)
{

    serwer_buttons[id]->setText(s_name);
    serwer_buttons[id]->setIcon(QIcon("icons/blueicon.png"));
}

void MainWindow::rconvalid(int id, bool val)
{
    if(val)
    {
        serwer_managers[id]->info->activeRcon=true;
        serwer_buttons[id]->setIcon(QIcon("icons/redicon.png"));
    }
    else
    {
        serwer_managers[id]->info->activeRcon=false;

    }
}

void MainWindow::change_serwer_slot(int numer)
{
    if(numer==0) emit change_serwer_signal(tools_tab);
    else emit change_serwer_signal(serwer_managers[numer]);
}
